iT邦幫忙

1

二、三天學一點點 Rust:來!array、trait、The dbg! Macro(11)

  • 分享至 

  • xImage
  •  

🧠 Rust 陣列 Array 基礎教學

在 Rust 中,陣列(array) 是一種固定大小的資料集合,元素必須是相同型別(homogenous)


✅ 陣列基本語法

let numbers: [i32; 6] = [1, 5, 18, 33, 40, 42];

其中[i32; 6],i32是元素型別、6是元素個數,但是陣列的長度固定,無法動態增減。

📦 空陣列範例

let _currency_rates: [f64; 0] = [];

在Rust中,空陣列仍是合法型別,但仍需指定型別與長度

🔄 可變陣列與索引

let mut seasons: [&str; 4] = ["Spring", "Summer", "Fall", "Winter"];//使用mut,陣列可修改元素值
println!("{}", seasons[2]); // 印出Fall

seasons[2] = "Autumn"; // 修改第 3 項
println!("{}", seasons[2]); // 印出Autumn

🔗 陣列元素賦值給變數

let seasons: [&str; 4] = ["Spring", "Summer", "Fall", "Winter"];
let first: &str = seasons[0];
let second: &str = seasons[1];
println!(
    "The first season is {} and second season is {}.",
    first, second);

可以使用索引取出元素並賦值給變數,陣列內元素為 &str,所以取出值型別為 &str。

🧠 Trait 基礎入門:Display、Debug、dbg!Marco

在 Rust 中,Trait(特徵) 是一種「行為的契約」。
Trait 定義了一組方法,如果一個型別實作了這個 trait,就保證提供這些方法。

簡單理解:Trait 就像是能力說明書 ➔「能做這些事」的保證。


📘 Trait 是什麼?(簡單定義)

  • Trait 是一種規範或契約,型別可以選擇要不要實作它。
  • Rust 的 trait 有點像其他語言的 interface(介面)protocol(協定)
  • Trait 讓型別之間共享行為,即使它們內部結構不同。

🖍️ Display Trait:為人類友善的輸出

Display trait 允許一個型別用「友善、乾淨的格式」呈現在畫面上。

✅ 特點

  • {} 插值時會自動呼叫 Display
  • 常見型別(整數、浮點數、布林)預設已實作 Display

📦 範例

fn main() {
    println!("{}", 5);     // 整數
    println!("{}", 3.14);  // 浮點數
    println!("{}", true);  // 布林值
}

這些型別因為有實作 Display,可以直接用 {} 格式化。

🧩 Debug Trait:為開發者友善的輸出

Debug trait 允許一個型別用「給開發者看的格式」印出資料。

✅ 特點

用 {:?} 插值時會呼叫 Debug。
有些型別(例如陣列)預設只有 Debug,沒有 Display。
用於除錯、快速查看變數內容。

fn main() {
    let seasons: [&str; 4] = ["Spring", "Summer", "Fall", "Winter"];

    println!("{:?}", seasons); // 使用 Debug trait
}

如果你試圖用 {} 印出 seasons 陣列,會錯誤!因為陣列沒有實作 Display。
但 {:?} 可以成功,因為陣列有實作 Debug。

🐛 dbg! Macro:快速除錯神器

dbg! 是 Rust 內建的一個小工具,用來快速「印出變數內容」和「所在的程式位置」。

✅ 特點

  • 不只是輸出變數,也會顯示檔案路徑與行號。
  • 可以直接輸出運算式,不改動程式邏輯。
  • 在正式版時通常會移除,只留給開發者用。
fn main() {
    let seasons = ["Spring", "Summer", "Fall", "Winter"];

    dbg!(2 + 2);
    dbg!(seasons);
}

輸出類似:

[src/main.rs:6] 2 + 2 = 4
[src/main.rs:7] seasons = [
     "Spring", 
     "Summer", 
     "Fall", 
     "Winter"
]

根據上述程式結果,它會告訴你現在在那個檔案,第幾行這樣。

結論

這章節課程針對Trait的講解,分成入門和進階,現階段只要讓學習者先有概念,但我還是翻閱書籍和搜尋網路,發現Rust並沒有類別的概念,而是採用「Struct + Trait + impl」的方式來定義。
用白話的解釋:

  • Trait:
    ➔ 就是「規定」每個人必須9 點前到公司,但不管你怎麼到。
    (只管方法的存在,不管內容)

  • Struct:
    ➔ 是「人」本身的資料,例如「小明,25 歲,工程師」。

  • Impl:
    ➔ 是「小明決定自己要騎腳踏車來」,小美則是「搭捷運來」。
    (每個 struct 自己根據 trait 的規格,寫自己的邏輯)


圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
helloworld123
iT邦新手 4 級 ‧ 2025-05-02 23:46:33

這看起來很像AI的輸出誒

對哦~~有使用GPT哦…

我要留言

立即登入留言